package com.budwk.app.popo.service;

import com.budwk.app.popo.bo.PopoUserBO;
import com.budwk.app.sys.models.Sys_user;

import java.io.File;
import java.io.InputStream;
import java.util.List;

public interface PopoInterfaceService {

    /**
     * 添加泡泡用户
     *
     * @param userName  用户名(登录名)
     * @param nickName  用户昵称
     * @param avatarUrl 头像地址
     * @param password  密码(明文)
     * @param sign      个性签名(可以为空)
     * @return 结果 泡泡用户id
     */
    String addPopoUser(String userName, String nickName, String avatarUrl, String password, String sign);

    /**
     * 更新泡泡用户信息
     *
     * @param loginUid     登录的泡泡id
     * @param nickname     昵称
     * @param avatar       头像
     * @param sign         个性签名
     * @param accountState 用户状态 normal正常  disabled禁用
     * @return 结果
     */
    Integer updatePopoUser(String loginUid, String nickname, String avatar, String sign, String accountState);

    String addPopoUser(Sys_user sysUser);

    /**
     * 获取泡泡用户个人信息
     *
     * @param uid      uid
     * @param userName 用户登录名，可选参数，但是uid和username必须传递其中一个
     * @param password 密码，可选参数。当传递password参数时，username参数必须传递
     * @param loginUid 当前登录用户的uid，当传递这个参数时，返回值会增加is_friend字段，用来判断是否是好友。以及remark好友备注字段
     * @return 结果泡泡用户信息
     */
    PopoUserBO getPopoUser(String uid, String userName, String password, String loginUid);

    /**
     * 发型泡泡消息
     *
     * @param loginUid 当前登录用户uid
     * @param to       接收者id，可能是群组gid，也可能是uid，具体取决于tpye类型
     * @param type     类型，group 群组消息;friend 好友消息
     * @param content  content 消息内容
     *                 <p>
     *                 content特殊消息格式
     *                 1、表情格式：[表情X]，X为数字，从0到100
     *                 2、图片格式：![](图片url)
     *                 3、文件格式：file[文件名\t大小](文件url下载地址)
     *                 4、语音格式：voice(语音url)
     *                 5、连接格式：[显示字符](url地址)
     * @return 泡泡消息id
     */
    String sendMessage(String loginUid, String to, String type, String content);

    Integer addFriend(String loginUid, String friendUid);

    /**
     * 上传泡泡用户头像
     *
     * @param inputStream 输入流
     * @param popoUid     泡泡用户id
     */
    Integer uploadAvatar(InputStream inputStream, String fileName, String popoUid);

    /**
     * 根据系统用户id删除泡泡用户
     *
     * @param userIdList 系统用户id
     */
    Integer deletePopoUser(List<String> userIdList);

    /**
     * 根据泡泡消息id撤回消息
     *
     * @param popoMid 泡泡消息id
     * @return 撤回的条数
     */
    Integer revokeMessage(String loginUid, String popoUid, String popoMid);
}
